const express =require('express');
const app=express();

// app.post('/login',(req,res)=>{
//     res.end('登录成功,欢迎回来~');
// });

// app.get('/home',(req,res)=>{
//     res.end('首页的轮播图/推荐数据列表~');
// });

// app.listen(9000,()=>{
//     console.log('Express服务器启动成功~');
// });

// 二、给express创建的app传⼊⼀个回调函数
// 传⼊的这个回调函数就称之为是中间件(middleware)
// app.post('/login', 回调函数 => 中间件)
// app.post('/login',(req,res,next)=>{
// // 1.中间件中可以执⾏任意代码
// console.log('first middleware exec~');
//  // 其他操作，如查询数据、判断逻辑等等
//  // 2.在中间件中修改req/res对象
// req.age=99;
//  // 3.可以在中间件中结束响应周期
//  // res.json({ message: "登录成功, 欢迎回来", code: 0 });
//  // 4.执⾏下⼀个中间件
// next();
// });
// app.use((req,res,next)=>{
//     console.log('second middleware exec~');
// });
// app.listen(9000,()=>{
//     console.log('Express服务器启动成功~');
// });


// 总结: 当express接收到客户端发送的⽹络请求时, 在所有中间件中开始进⾏匹配
// 当匹配到第⼀个符合要求的中间件时, 那么就会执⾏这个中间件
// 后续的中间件是否会执⾏呢? 取决于上⼀个中间件有没有执⾏next
// 通过use⽅法注册的中间件是最普通的/简单的中间件
// 通过use注册的中间件, ⽆论是什么请求⽅式都可以匹配上
// login/get, login/post, abc/patch等
// app.use((req,res,next)=>{
//     console.log('normal middleware 01');
//  // 例如： res.end('返回结果了, 不要等了'); // 若取消注释，将阻⽌后续中间件执⾏
//     next();
// });
// app.use((req,res,next)=>{
//     console.log('normal middleware 02');

// });
// // 开启服务器
// app.listen(9000,()=>{
//     console.log('Express服务器启动成功~');
// });


// 注册普通的中间件
// app.use((req, res, next) => {
// console.log('match normal middleware');
// res.end('--------');
// });
// 注册路径匹配的中间件
// 路径匹配的中间件是不会对请求⽅式(method)进⾏限制
// app.use('/home',(req,res,next)=>{
//     console.log('match /home middleware');
//     res.end('home data');
// });

// app.listen(9000,()=>{
//     console.log('Express服务器启动成功~');
// });


// 注册中间件: 对path/method都有限制
// app.method(path, middleware)
// app.get('/home',(req,res,next)=>{
//     console.log('match /home get method middleware');
//     res.end('home data');
// });
// app.post('/users',(req,res,next)=>{
//     console.log('match /users post method middleware');
//     res.end('create user success');
// });
// app.listen(9000,()=>{
//     console.log('Express服务器启动成功~');
// });


// app.get('/home',(req,res,next)=>{
//     console.log('match /home get middleware01');
//     next();
// },(req,res,next)=>{
//     console.log('match /home get middleware02');
//     next();
// },(req,res,next)=>{
//     console.log('match /home get middleware03');
//     next();
// },(req,res,next)=>{
//     console.log('match /home get middleware04');
//     res.end('All midxdleware executed');
// }
// );
// app.listen(9000,()=>{
//     console.log('Express服务器启动成功~');
// });


// 1.注册两个普通的中间件
// app.use((req,res,next)=>{
//     console.log('normal middleware01');
//     next();
// });
// app.use((req,res,next)=>{
//     console.log('normal middleware02');
//     next();
// });
// // 2.注册路径path/method的中间件
// app.get('/home',(req,res,next)=>{
//     console.log('/home get middleware01');
//     next();
// },(req,res,next)=>{
//     console.log('/home get middleware02');
//     res.end('GET /home response completed');
// }
// );
// app.post('/login',(req,res,next)=>{
//     console.log('/login post middleware');
//     res.end('POST /login response completed');
// });
// // 3.注册普通的中间件
// app.use((req,res,next)=>{
//     console.log('normal middleware03');
//     next();
// });
// app.use((req,res,next)=>{
//     console.log('normal middleware04');
// });
// app.listen(9000,()=>{
//     console.log('Express服务器启动成功~');
// });



// 案例⼀: ⽤户登录的请求处理 /login post => username/password
// app.post('/login',(req,res,next)=>{
//     //1.获取本次请求过程中传递过来的json数据
//     let isLogin=false;
//     req.on('data',(data)=>{
//         const dataString=data.toString();
//         const dataInfo=JSON.parse(dataString);
//         if (dataInfo.username==='gkd'&&dataInfo.password==='123456'){
//             isLogin=true;
//         }
//     });
//     req.on('end',()=>{
//         if(isLogin){
//             res.end('登陆成功,欢迎回来~');
//         }else{
//             res.end('登陆失败,请检测账号和密码是否正确~');
//         }
//     });
// });
// // 案例⼆: 注册⽤户的请求处理 /register post => username/password
// app.post('/register',(req,res,next)=>{
//     // 1.获取本次请求过程中传递过来的json数据
//     let isRegister=false;
//     req.on('data',(data)=>{
//         const dataString=data.toString();
//         const dataInfo=JSON.parse(dataString);
//         // 查询数据库中该⽤户是否已经注册过
//         isRegister=false;
//     });
//     req.on('end',()=>{
//         if(isRegister){
//             res.end('注册成功,开始你的旅程~');
//         }else{
//             res.end('注册失败,您输入的用户名被注册~');
//         }
//     });
// });
// app.listen(9000,()=>{
//     console.log('Express服务器启动成功~');
// });




// 使⽤Express内置的JSON中间件解析JSON数据
app.use(express.json());
// 注册两个实际请求的中间件
// 案例⼀: ⽤户登录的请求处理 /login post => username/password
app.post('/login',(req,res,next)=>{
    // 通过Express内置的中间件，req.body已经拥有解析后的JSON数据
    const {username,password}=req.body;
    console.log(req.body);
    if(username==='gkd'&&password==='123456'){
        res.end('登录成功,欢迎回来~');
    }else{
        res.end('登录失败,请检测账号和密码是否正确~');
    }
});
// 案例⼆: 注册⽤户的请求处理 /register post => username/password
app.post('/register',(req,res,next)=>{
    const {username}=req.body;
    console.log(req.body);
// 模拟现有⽤户查询逻辑
    const existingUsers=['existinguser'];
    if(existingUsers.includes(username)){
        res.end('注册失败,您输入的用户名被注册~');
    }else{
        res.end('注册成功,开始你的旅程~');
    }
});
app.listen(9000,()=>{
    console.log('Express服务器启动成功~');
});